package com.saydc.dao;

import java.util.ArrayList;
import java.util.List;

import org.hibernate.Session;
import org.hibernate.criterion.Restrictions;

import com.saydc.model.Capacitacion;
import com.saydc.model.Empleado;
import com.saydc.utils.HibernateUtils;

public class CapacitacionesDAO {
	
	private static CapacitacionesDAO instance;

	public static CapacitacionesDAO getInstance(){
		if(instance == null){
			instance = new CapacitacionesDAO();
		}
		return instance;
	}
	
	@SuppressWarnings("unchecked")
	public List<Capacitacion> getAllCapacitaciones(){
		Session session = HibernateUtils.currentSession();
    	List<Capacitacion> listaCapacitaciones = (List<Capacitacion>)session.createQuery("select c from Capacitacion c").list();
    	return listaCapacitaciones;
    }

	@SuppressWarnings("unchecked")
	public ArrayList<Empleado> getEmpleadosConCapacitacionPendiente(Capacitacion capacitacion) {
		ArrayList<Empleado> empleadosConCapacitacion = new ArrayList<Empleado>();
		Session session = HibernateUtils.currentSession();
		
		List<Empleado> lista = (List<Empleado>)session.createQuery("select e from Empleado e").list();
		
		for(Empleado e : lista){
			if(e.getCapacitacionesPendientes().contains(capacitacion)){
				empleadosConCapacitacion.add(e);
			}
		}
		
		return empleadosConCapacitacion;
	}

	public Capacitacion getCapacitacion(int capacitacion) {
		Session session = HibernateUtils.currentSession();
		Capacitacion cap = (Capacitacion)session.createCriteria(Capacitacion.class)
									.add(Restrictions.eq("idCapacitacion", capacitacion))
									.uniqueResult();
		return cap;
	}

	@SuppressWarnings("unchecked")
	public List<Empleado> getEmpleadosConCapacitacionRealizada(Capacitacion capacitacion) {
		ArrayList<Empleado> empleadosConCapacitacion = new ArrayList<Empleado>();
		Session session = HibernateUtils.currentSession();
		
		List<Empleado> lista = (List<Empleado>)session.createQuery("select e from Empleado e").list();
		
		for(Empleado e : lista){
			if(e.getCapacitacionesRealizadas().contains(capacitacion)){
				empleadosConCapacitacion.add(e);
			}
		}
		
		return empleadosConCapacitacion;
	}
	

}
